package com.dha.asynctask;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import com.dha.adapter.ThongBaoAdapter;
import com.dha.caodangcongnghe.R;
import com.dha.caodangcongnghe.XemThongBao;
import com.dha.model.ThongBaoModel;
import com.dha.variable.ThongBaoVariable;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;

public class XemThongBaoTomLuocAsyncTask extends
		AsyncTask<Void, String, Integer> {
	private ProgressDialog dialog;

	private Activity activity;

	private ListView listView;

	// private ArrayList<ThongBaoModel> arr;

	// private ThongBaoAdapter adapter;

	private String maGiaoVien = null, ngayDang = null;
	// private int maThongBao = -1;
	// cái này để chuyển từ dạng "yyyy-MM-dd'T'HH:mm:ss" bên sql qua
	private SimpleDateFormat dateFormat = new SimpleDateFormat(
			"yyyy-MM-dd'T'HH:mm:ss");
	// // cái này để chuyển sang dạng mong muốn
	private SimpleDateFormat dateOutput = new SimpleDateFormat(
			"HH:mm - dd/MM/yyyy");

	//
	private final int OK = 100;
	private final int KHONG_CO_THONG_BAO = 101;
	private final int LOI_LAY_THONG_BAO = 102;

	public XemThongBaoTomLuocAsyncTask(Activity activity, String maGiaoVien,
			String ngayDang) {
		super();
		this.activity = activity;
		listView = (ListView) activity.findViewById(R.id.lv_ThongBao);
		// arr = new ArrayList<ThongBaoModel>();

		// adapter = new ThongBaoAdapter(activity,
		// R.layout.layout_thongbao_custom, arr);
		//
		// listView.setAdapter(adapter);

		this.maGiaoVien = maGiaoVien;
		this.ngayDang = ngayDang;
		// this.maThongBao = maThongBao;

		// arr = XemThongBao.arr;
	}

	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		dialog = ProgressDialog.show(activity, "Vui lòng chờ",
				"Đang tải thông báo về");
		super.onPreExecute();
	}

	@Override
	protected Integer doInBackground(Void... params) {
		String url = ThongBaoVariable.URL;
		String namespace = ThongBaoVariable.NAME_SPACE;
		String methodname = ThongBaoVariable.METHOD_NAME_XEMTHONGBAO;
		SoapSerializationEnvelope envelope = null;
		try {
			// if (maGiaoVien.equals(null) & ngayDang.equals(null)) {
			// //xem khong dieu kien
			// methodname = ThongBaoVariable.METHOD_NAME_XEMTHONGBAO;
			// Log.i("hehe","2 ba null");
			// } else {
			// if (ngayDang.equals(null) & maGiaoVien != null) {
			// //xem theo giao vien
			// methodname = ThongBaoVariable.METHOD_NAME_XEMTHONGBAO_MAGIAOVIEN;
			// Log.i("hehe","ngay Dang null");
			// }else{
			// if (maGiaoVien.equals(null) & ngayDang != null){
			// //xem theo ngay
			// methodname =
			// ThongBaoVariable.METHOD_NAME_XEM_THONG_BAO_THEO_NGAY;
			// Log.i("hehe","giao vien null");
			// }else{
			// //xem ca 2
			// methodname =
			// ThongBaoVariable.METHOD_NAME_XEM_THONG_BAO_THEO_NGAY_VA_GIAO_VIEN;
			// Log.i("hehe","all");
			// }
			// }
			// }

			if (maGiaoVien != null && ngayDang != null) {
				methodname = ThongBaoVariable.METHOD_NAME_XEM_THONG_BAO_THEO_NGAY_VA_GIAO_VIEN;
			} else {
				if (maGiaoVien != null) {
					methodname = ThongBaoVariable.METHOD_NAME_XEMTHONGBAO_MAGIAOVIEN;
				}
				if (ngayDang != null) {
					methodname = ThongBaoVariable.METHOD_NAME_XEM_THONG_BAO_THEO_NGAY;
				}
			}

			String soapAction = namespace + methodname;
			SoapObject request = new SoapObject(namespace, methodname);
			// doi so ma giao vien
			PropertyInfo maGiaoVienInfo = new PropertyInfo();
			maGiaoVienInfo.setName("MaGiaoVien");
			maGiaoVienInfo.setValue(maGiaoVien);
			request.addProperty(maGiaoVienInfo);
			// doi so ngay dang
			PropertyInfo ngayDangInfo = new PropertyInfo();
			ngayDangInfo.setName("Ngay");
			ngayDangInfo.setValue(ngayDang);
			request.addProperty(ngayDangInfo);
			//
			envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			envelope.setOutputSoapObject(request);

			HttpTransportSE httpTransportSE = new HttpTransportSE(url);
			httpTransportSE.call(soapAction, envelope);
			Vector<SoapObject> respone = (Vector<SoapObject>) envelope
					.getResponse();
			if (respone != null) {
				for (SoapObject so : respone) {
					publishProgress(so.getProperty("tieuDe").toString(), so
							.getProperty("noiDung").toString(),
							so.getProperty("tenGiaoVien").toString(), so
									.getProperty("ngayDang").toString(), so
									.getProperty("maThongBao").toString());
				}
				return OK;
			} else {
				return KHONG_CO_THONG_BAO;
			}
			// neu co gia tri ma giao vien la null
			// co nghia la ma giao vien null
			// lam vie tai thong bao full ve
			// } catch (NullPointerException n) {
			// try {
			// methodname = ThongBaoVariable.METHOD_NAME_XEMTHONGBAO;
			// String soapAction = namespace + methodname;
			// SoapObject request = new SoapObject(namespace, methodname);
			// envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			// envelope.setOutputSoapObject(request);
			//
			// HttpTransportSE httpTransportSE = new HttpTransportSE(url);
			// httpTransportSE.call(soapAction, envelope);
			// Vector<SoapObject> respone = (Vector<SoapObject>) envelope
			// .getResponse();
			// if (respone != null) {
			// for (SoapObject so : respone) {
			// publishProgress(so.getProperty("tieuDe").toString(), so
			// .getProperty("noiDung").toString(), so
			// .getProperty("tenGiaoVien").toString(), so
			// .getProperty("ngayDang").toString(),so.getProperty("maThongBao").toString());
			// }
			// return true;
			// } else {
			// return false;
			// }
			//
			// } catch (Exception e) {
			// return false;
			// }
			// neu co 1 thong bao
		} catch (java.lang.ClassCastException ex) {
			try {
				SoapObject so = (SoapObject) envelope.getResponse();
				if (so != null) {
					publishProgress(so.getProperty("tieuDe").toString(), so
							.getProperty("noiDung").toString(),
							so.getProperty("tenGiaoVien").toString(), so
									.getProperty("ngayDang").toString(), so
									.getProperty("maThongBao").toString());
					return OK;
				} else {
					return KHONG_CO_THONG_BAO;
				}
			} catch (SoapFault e) {
				return LOI_LAY_THONG_BAO;
			}
		} catch (Exception e) {
			return LOI_LAY_THONG_BAO;
		}

	}

	@Override
	protected void onProgressUpdate(String... values) {
		String tieuDe = values[0].toString();
		// neu tieu de dai hon 10 ki tu
			tieuDe = values[0].toString();

		String noiDung = values[1].toString();
		// neu noi dung >10 ki tu
		if (noiDung.length() >= 50) {
			noiDung = values[1].toString().substring(0, 50) + " ...";
		}

		String nguoiDang = values[2].toString();
		String ngayDangTuSQL = values[3].toString();
		int maThongBao = Integer.parseInt(values[4].toString());
		String ngayDangInRa = null;
		try {
			// Chuyển dạng tring lấy ra quên sql, service qua dạng ngày
			Date date = dateFormat.parse(ngayDangTuSQL.substring(0, 19));
			// chuyển ngược về lại dạng mong muốn
			ngayDangInRa = dateOutput.format(date);
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			Log.i("hehe", e1.toString());
		}

		ThongBaoModel tb = new ThongBaoModel(maThongBao, tieuDe, noiDung,
				nguoiDang, ngayDangInRa);

		XemThongBao.arr.add(tb);

		// adapter.notifyDataSetChanged();

		super.onProgressUpdate(values);
	}

	@Override
	protected void onPostExecute(Integer result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		AlertDialog.Builder builder = null;
		builder = new Builder(activity);
		builder.setNegativeButton("Đóng", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				activity.finish();
			}
		});
		AlertDialog alertDialog = null;
		switch (result) {
		case OK:
			XemThongBao.adapter.notifyDataSetChanged();
			break;
		case KHONG_CO_THONG_BAO:
			builder.setTitle("Thông tin");
			builder.setMessage("Không có thông báo");
			alertDialog = builder.create();
			alertDialog.show();
			break;
		case LOI_LAY_THONG_BAO:
			builder.setTitle("Lỗi");
			builder.setMessage("Lỗi trong việc lấy thông báo");
			alertDialog = builder.create();
			alertDialog.show();
			break;
		}
		
		dialog.dismiss();
		
	}

}
